Ndertimi i nje baze te dhenash reale

Per te kuptuar me mire deklaratat SQL do te paraqesim nje shembull me real te krijimit te nje baze te dhenash. Bazen e te dhenave te cilen do te krijojme ne vijim do t'a perdorim per nje projekt real, te cilin do t'a ndertojme ne nje nder kapitujt ne vijim. Meqenese jemi tek nje kapitull i cili trajton PHP-ne me MySQL, ne kete seksion do te ndertojme databazen te cilen do t'a perdorim me vone.

Projekti qe do te bejme konsiston ne nje faqe web, faqja e Fakultetit te Teknologjise se Informacionit. Kjo faqe do te sherbeje me shume qe te publikoje njoftimet dhe artikujt e fundit, te postuara nga pedagoge te departamenteve te ndryshme. Artikujt dhe njoftimet do te grupohen sipas departamenteve. Perdoruesit qe do te perdorin faqen jane 3 lloje:

  • Vizitor - Ky lloj perdoruesi mund te kryeje veprimet e meposhtme:

    1. Te vizitoje faqen web, dhe te shikoje njoftimet dhe artikujt e fundit te grupuara sipas departamenteve
  • Pedagog - Ky lloj perdoruesi mund te kryeje veprimet e meposhtme:

    1. Te vizitoje faqen web, dhe te shikoje njoftimet dhe artikujt e fundit te grupuara sipas departamenteve
    2. Te logohet ne faqe me ane te email dhe fjalekalim. Pasi te logohet mund:
      1. Te postoje artikuj ne emer te departamentit te vet
      2. Te postoje njoftime ne emer te departamentit te vet
  • Administrator - Ky lloj perdoruesi mund te kryeje veprimet e meposhtme:

    1. Te vizitoje faqen web, dhe te shikoje njoftimet dhe artikujt e fundit te grupuara sipas departamenteve
    2. Te logohet ne faqe me ane te email dhe fjalekalim. Pasi te logohet mund:
      1. Te krijoje nje perdorues te ri te sistemit

Per nje sistem te tille na nevojitet nje baze te dhenash me 4 tabela.

Per te krijuar nje baze te dhenash na duhet nje sistem per menaxhimin e bazave te te dhenave. Ne do te perdorim sistemin MySQL. Per te menaxhuar nje sistem te tille ekzistojne softuer me paraqitje grafike, por mund te behet edhe me ane te komandave duke perdorur aplikacione te tilla si Terminal ne sistemet Linux apo Mac, ose Command Promt ne sistemet Windows. Aplikacionet me komanda kerkojne njohuri pak te avancuara per nje fillestar, por mund te perdorni lehtesisht nje softuer me paraqitje grafike sic eshte MySQL Workbench i cili eshte falas per t'u shkarkuar.

Bazat e te dhenave zakonisht ndertohen ne servera te dedikuar vetem per to, por ne rastin tone ne mund te perdorim edhe kompjuterin tone lokal duke e transformuar si server. Per kete mjafton te kemi instaluar nje softuer si p.sh. XAMP i cili rrit funksionalitetin ne kompjuterint tone duke sherbyer edhe si server. Normalisht cdo server ka nevoje per nje IP qe te krijojme nje lidhje me te. Po kompjuteri yne ne kete rast me cfare IP-je aksesohet si server? Kemi permendur edhe me pare, qe kompjuteri yne aksesohet me IP-ne 127.0.0.1 ose thjesht duke shkruajtur localhost.

Kur hapim programin MySQL Workbench ne menyre qe te punojme me bazen e te dhenave ne kompjuterin lokal, nevojitet qe fillimisht te kemi startuar programin XAMP dhe te kemi nisur START seksionin MySQL Server. Me pas, ne programin MySQL Workbench duhet te krijojme nje lidhje te re ne seksionin Connections. Kjo lidhje na kerkon tre parametra kryesore:

  • Host - Eshte IP-ja e serverit me te cilin do te lidhemi. Dukeqenese punojme ne kompjuterin lokal shenojme 127.0.0.1 ose thjesht tekstin localhost
  • User dhe Password - Kerkon te specifikojme me cfare perdoruesi do te hyjme ne serverin e bazes se te dhenave. Ashtu sic mund te logohemi me username dhe password ne kompjuterat tane Windows, Linux apo Mac, edhe nje server i tille MySQL kerkon qe ti hyjme me username dhe password. Lind pyetja kur e kemi vendosur nje username? Username dhe password vendosen kur instalojme per here te pare teknologji si XAMP ose MySql Server, ose krijohet automatikisht vete perdoruesi me username root dhe pa password.

Pasi te kemi futur te dhenat e nevojshme dhe te klikojme per t'u lidhur do te krijohet nje lidhje me serverin lokal dhe do te na listohen databazat aktuale. Ne rast se nuk e kemi perdorur kurre me pare aty mund te gjendet vetem ndonje databaze konfigurimi e vete serverit MySQL. Ne nje pjese tjeter te programit ndodhet ajo cfare na intereson me shume, vendi ku do te shkruajme deklaratat SQL per t'i ekzekutuar.

Fillojme me krijimin e bazes se te dhenave te cilen do ta quajme fakulteti:

CREATE DATABASE fakulteti;

Pasi ekzekutojme komanden e mesiperme do te shohim qe ne listen e databazave do te shtohet edhe databaza me emrin fakulteti.

Databaza jone do te kete 4 tabela:

  • departamentet - Do te mbaje listen e departamenteve te fakultetit, dhe do te perbehet nga fushat e meposhtme:

    1. id

      • Do te jete celes primar sepse eshte identifikues unik.
      • Nuk do te pranoje vlera NULL sepse duhet te jete gjithnje numer, i tipit int
      • Do te jete AUTO_INCREMENT ne menyre qe kur te shtojme departament te ri, id-ja te gjenerohet automatikisht
    2. emri

      • Do te mbaje emrin e departamentit
      • Do te jete i tipit varchar qe pranon maksimumi 100 karaktere
      • Nuk duhet te pranoje vleren NULL sepse nuk ka sens nje departament me nje emer te tille
    3. pershkrimi

      • Do te mbaje nje pershkrim te departamentit nese eshte i nevojshem, perndryshe NULL
      • Do te jete i tipit text
  • perdoruesit - Do te mbaje listen e departamenteve te fakultetit, dhe do te perbehet nga fushat e meposhtme:

    1. id

      • Do te jete celes primar sepse eshte identifikues unik.
      • Nuk do te pranoje vlera NULL sepse duhet te jete gjithnje numer, i tipit int
      • Do te jete AUTO_INCREMENT ne menyre qe kur te shtojme perdorues te ri, id-ja te gjenerohet automatikisht
    2. emri

      • Do te mbaje emrin e perdoruesit
      • Do te jete i tipit varchar qe pranon maksimumi 80 karaktere
      • Nuk duhet te pranoje vleren NULL sepse nuk ka sens nje perdorues pa emer
    3. email

      • Do te mbaje e-mailin e perdoruesit me ane te te cilit mund te logohet ne faqe
      • Do te jete i tipit varchar me maksimumi 50 karaktere.
      • Nuk duhet te pranoje vleren NULL sepse perdoruesi duhet te kete patjeter nje email
    4. password

      • Do te mbaje fjalekalimin e perdoruesit me ane te te cilit do te logohet ne faqe
      • Do te jete i tipit varchar me maksimumi 100 karaktere.
      • Nuk duhet te pranoje vleren NULL sepse perdoruesi duhet te kete patjeter nje fjalekalim
    5. tipi

      • Do te jete i nje lloj tipi te vecante te quajtur SET('0', '1') i cili mban vleren 0 ose vleren 1
      • Vlera 0 tregon qe perdoruesi eshte administrator, ndersa vlera 1 tregon qe perdoruesi eshte pedagog
      • Vlera default do te jete 1
    6. id_departament

      • Do te jete FOREIGN KEY qe referencon fushen id te tabeles departamentet
      • Do te jete i tipit int pasi referencon nje fushe te ketij tipi
      • Mund te mbaje edhe vleren NULL sepse perdoruesit e tipit 0 (administrator) nuk duhet te jene te lidhur me departamentin, ndersa pedagoget po.
  • artikujt - Do te mbaje listen e artikujve

    1. id

      • Do te jete celes primar sepse eshte identifikues unik.
      • Nuk do te pranoje vlera NULL sepse duhet te jete gjithnje numer, i tipit int
      • Do te jete AUTO_INCREMENT ne menyre qe kur te shtojme artikull te ri, id-ja te gjenerohet automatikisht
    2. titulli

      • Do te mbaje titullin e artikullit
      • Do te jete i tipit varchar qe pranon maksimumi 255 karaktere
      • Nuk duhet te pranoje vleren NULL sepse nuk ka sens nje artikull pa titull
    3. pershkrimi

      • Do te mbaje permbajtjen e artikullit
      • Do te jete i tipit text
      • Nuk duhet te pranoje vleren NULL sepse nuk ka sens nje artikull pa permbajtje
    4. data

      • Do te mbaje daten e krijimit te artikullit
      • Do te jete i tipit date
      • Nuk duhet te pranoje vleren NULL sepse cdo artikull duhet te kete nje date krijimi
    5. id_departament

      • Do te jete FOREIGN KEY qe referencon fushen id te tabeles departamentet
      • Do te jete i tipit int pasi referencon nje fushe te ketij tipi
      • Nuk duhet te pranoje vleren NULL sepse artikujt do te kategorizohen sipas departamenteve, ndaj na sherben qe cdo artikull te jete i lidhur me nje departament
  • njoftimet - Do te mbaje listen e njoftimeve

    1. id

      • Do te jete celes primar sepse eshte identifikues unik.
      • Nuk do te pranoje vlera NULL sepse duhet te jete gjithnje numer, i tipit int
      • Do te jete AUTO_INCREMENT ne menyre qe kur te shtojme njoftim te ri, id-ja te gjenerohet automatikisht
    2. titulli

      • Do te mbaje titullin e njoftimit
      • Do te jete i tipit varchar qe pranon maksimumi 255 karaktere
      • Mund te pranoje vleren NULL
    3. pershkrimi

      • Do te mbaje permbajtjen e njoftimit
      • Do te jete i tipit text
      • Nuk duhet te pranoje vleren NULL sepse nuk ka sens nje njoftim pa permbajtje
    4. data

      • Do te mbaje daten e krijimit te njoftimit
      • Do te jete i tipit date
      • Nuk duhet te pranoje vleren NULL sepse cdo njoftim duhet te kete nje date krijimi
    5. id_departament

      • Do te jete FOREIGN KEY qe referencon fushen id te tabeles departamentet
      • Do te jete i tipit int pasi referencon nje fushe te ketij tipi
      • Nuk duhet te pranoje vleren NULL sepse njoftimet do te kategorizohen sipas departamenteve, ndaj na sherben qe cdo njoftim te jete i lidhur me nje departament

Ndertojme deklaratat SQL per te krijuar tabelat e mesiperme, dhe i ekzekutojme ato ne dritaren e ekzekutimit te SQL-se, ne programin MySql Workbench.

Krijojme tabelen departamentet:

CREATE TABLE departamentet
(   
    id int NOT NULL AUTO_INCREMENT,
    emri varchar(100) NOT NULL,
    pershkrimi text,

    PRIMARY KEY (id)
);

Krijojme tabelen perdoruesit:

CREATE TABLE perdoruesit
(   
    id int NOT NULL AUTO_INCREMENT,
    emri varchar(80) NOT NULL,
    email varchar(50) NOT NULL,
    `password` varchar(100) NOT NULL,
    tipi SET('0', '1') DEFAULT '1',
    id_departament int NOT NULL,

    PRIMARY KEY (id),
    FOREIGN KEY (id_departament) REFERENCES departamentet(id)
);

Ne disa raste mund te lindin probleme te tilla si p.sh. nje emer fushe qe ti kerkon te vendosesh eshte e njejte me ndonje fjale te sintakses se SQL-se. Ne kete menyre do te gjenerohej error nga SQL-ja sepse nuk do te kuptonte deklaraten. Edhe ne rastin e mesiperm termi password eshte nje fjale qe ben pjese ne sintaksen e SQL-se. Per te menjanuar problemin qe mund te linde, fjalen password e kam futur ndermjet dy shenjave ` (backquote), pra `password`.

Krijojme tabelen artikujt:

CREATE TABLE artikujt
(   
    id int NOT NULL AUTO_INCREMENT,
    titulli varchar(255) NOT NULL,
    pershkrimi text NOT NULL,
    data date NOT NULL,
    id_departament int NOT NULL,

    PRIMARY KEY (id),
    FOREIGN KEY (id_departament) REFERENCES departamentet(id)
);

Krijojme tabelen njoftimet:

CREATE TABLE njoftimet
(   
    id int NOT NULL AUTO_INCREMENT,
    titulli varchar(255),
    pershkrimi text NOT NULL,
    data date NOT NULL,
    id_departament int NOT NULL,

    PRIMARY KEY (id),
    FOREIGN KEY (id_departament) REFERENCES departamentet(id)
);

Pas ekzekutimit me radhe te deklaratave te mesiperme, do te ndertohet baza e te dhenave. Lidhjet ndermjet tabelave paraqiten ne skemen e meposhtme:

Database Schema

results matching ""

    No results matching ""